#---- begin snakebids boilerplate ----------------------------------------------

import snakebids
from snakebids import bids

configfile: workflow.source_path('../config/snakebids.yml')

#writes inputs_config.yml and updates config dict
config.update(
    snakebids.generate_inputs(
        bids_dir=config["bids_dir"],
        pybids_inputs=config["pybids_inputs"],
        derivatives=config["derivatives"],
        participant_label=config["participant_label"],
        exclude_participant_label=config["exclude_participant_label"]
    )
)



#this adds constraints to the bids naming
wildcard_constraints:  **snakebids.get_wildcard_constraints(\
    config["pybids_inputs"]\
)

#---- end snakebids boilerplate ------------------------------------------------



rule all:
    input: 
        expand(
            expand(
                bids(
                    root=config['root'],
                    datatype='func',
                    suffix='bold.nii.gz',
                    desc='smooth{fwhm}mm',
                    **config['input_wildcards']['bold']
                ),
                fwhm = config['smoothing_fwhm'],
                allow_missing=True,
            ),
            zip,
            **config['input_zip_lists']['bold']
        )


rule smooth:
    input: config['input_path']['bold']
    params: sigma = lambda wildcards: f'{float(wildcards.fwhm)/2.355:0.2f}'
    output:
        bids(
            root=config['root'],
            datatype='func',
            desc='smooth{fwhm}mm',
            suffix='bold.nii.gz',
            **config['input_wildcards']['bold']
        )
    container: config['singularity']['fsl']
    log:
        bids(
            root='logs',
            suffix='smooth.log',
            fwhm='{fwhm}',
            **config['input_wildcards']['bold']
        )
    shell: 'fslmaths {input} -s {params.sigma} {output}'
